// 前面的名称固定的
import regeneratorRuntime from '../../libs/runtime/runtime';
import { axios } from '../../request/myAxios';
// 把之前的 auth 页面改成 auth 组件，页面和组件写法有差异。
//    1. 在 json 配置文件中添加 "component": true 
//    2. 把入口函数 Page() 改成 Component()
//    3. 把事件处理函数放到 methods:{ } 中
//    4. 通过 this.triggerEvent() 子传父，把用户信息传到父页面
//    5. 如果页面栈长度超过了一个才实现返回，否则进行其他不操作
Component({

  methods: {
    // 获取用户信息的回调函数
    async getUserInfo({ detail }) {

      try {
        // 1. 获取用户信息，其中四个是用于请求的，userInfo 是用于做界面展示的
        const { userInfo, signature, rawData, iv, encryptedData } = detail;

        // 2. 获取微信登录验证码，
        // wx.login() 返回 Promise 对象，配合 async await 使用很方便。
        const { code } = await wx.login();

        // 3. 把信息发送到服务器，换取 token
        const { token } = await axios({
          // 请求方式
          method: "POST",
          url: '/users/wxlogin',
          data: { signature, rawData, iv, encryptedData, code }
        });

        // 4.1 把用户信息保存到本地存储
        wx.setStorageSync('userInfo', userInfo);
        // 4.2 把 token 保存到本地存储
        wx.setStorageSync('token', token);

        // 子传父，更新父页面的视图
        this.triggerEvent('updateUserInfo', { userInfo });

        // 登录成功后跳转回上一个页面（支付页，个人中心页）
        const routers = getCurrentPages();
        // 路由栈中超过一个页面，才能实现后退
        if (routers.length > 1) {
          wx.navigateBack({
            delta: 1
          });
        }

      } catch (error) {
        // 登录失败提示重试
        wx.showToast({
          title: '授权失败，请重试',
          icon: 'none'
        });
      }

    }
  }

});